home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ivl
/
src
/
scrncom.h
< prev
next >
Wrap
Text File
|
2000-03-23
|
12KB
|
271 lines
#if !defined(SCRNCOM_H_HAS_INCLUDED)
#define SCRNCOM_H_HAS_INCLUDED
/*
* (グラフィック/テキストなど)画面制御に関する定義集
*
*注記 * 定義内容については各種ハードウェア解説書を参照のこと。
* ちなみに私が参考にしたのは「Inside X68000」(桑野正彦 著/ソフトバンク刊)
* である。
*
* programed by dummy.x. from Nov.14,1998
*/
#include "comtype.h"
/* 定数定義 */
/* 色データ */
#define RGB_VALUE_MIN 0 /* RGB各要素の最小値 */
#define RGB_VALUE_MAX 31 /* RGB各要素の最大値 */
/* グラフィック画面関係 */
#if defined(GRPH_512) /* 実画面サイズ:512x512 */
/* VRAM */
#define GRPH_PAGE_WIDTH 512 /* ページ横幅 */
#define GRPH_PAGE_W_BYTES (GRPH_PAGE_WIDTH * 2) /* ページ横幅のバイト数 */
#define GRPH_PAGE_HEIGHT 512 /* ページ縦高 */
/* ページ数 */
#if defined(GRPH_COLOR_16) /* 16色 */
#define GRPH_PAGE_KAZ 4
#elif defined(GRPH_COLOR_256) /* 256色 */
#define GRPH_PAGE_KAZ 2
#else /* 65536色 */
#define GRPH_PAGE_KAZ 1
#endif
#define GRPH_PAGE_SIZE (GRPH_PAGE_WIDTH * GRPH_PAGE_HEIGHT)
/* 1ページのサイズ(dot数) */
#define GRPH_PAGE_BYTES (GRPH_PAGE_W_BYTES * GRPH_PAGE_HEIGHT)
/* 1ページのサイズ(byte数) */
#define GRPH_PAGE_0 ((ushort *)0xc00000) /* ページ0アドレス */
#define GRPH_PAGE_1 (GRPH_PAGE_0 + GRPH_PAGE_SIZE) /* ページ1アドレス */
#define GRPH_PAGE_2 (GRPH_PAGE_1 + GRPH_PAGE_SIZE) /* ページ2アドレス */
#define GRPH_PAGE_3 (GRPH_PAGE_2 + GRPH_PAGE_SIZE) /* ページ3アドレス */
/* パレット */
/* 色数 */
#if defined(GRPH_COLOR_16) /* 16色 */
#define GRPH_COLOR_KAZ 16
#elif defined(GRPH_COLOR_256) /* 256色 */
#define GRPH_COLOR_KAZ 256
#else /* 65536色 */
#define GRPH_COLOR_KAZ 65536
#endif
#define GRPH_PALET_ADDR ((ushort *)0xe82000) /* パレットデータアドレス */
#else /* 実画面サイズ:1024x1024 */
/* VRAM */
#define GRPH_PAGE_WIDTH 1024 /* ページ横幅 */
#define GRPH_PAGE_W_BYTES (GRPH_PAGE_WIDTH * 2) /* ページ横幅のバイト数 */
#define GRPH_PAGE_HEIGHT 1024 /* ページ縦高 */
#define GRPH_PAGE_KAZ 1 /* ページ数 */
#define GRPH_PAGE_SIZE (GRPH_PAGE_WIDTH * GRPH_PAGE_HEIGHT)
/* 1ページのサイズ(dot数) */
#define GRPH_PAGE_BYTES (GRPH_PAGE_W_BYTES * GRPH_PAGE_HEIGHT)
/* 1ページのサイズ(byte数) */
#define GRPH_PAGE_0 ((ushort *)0xc00000) /* ページ0アドレス */
/* パレット */
/* 色数 */
#if defined(GRPH_COLOR_65536) /* 65536色 */
#define GRPH_COLOR_KAZ 65536
#elif defined(GRPH_COLOR_256) /* 256色 */
#define GRPH_COLOR_KAZ 256
#else /* 16色 */
#define GRPH_COLOR_KAZ 16
#endif
#define GRPH_PALET_ADDR ((ushort *)0xe82000) /* パレットデータアドレス */
#endif
/* テキスト画面関係 */
/* VRAM */
#define TEXT_PLANE_WIDTH 1024 /* プレーン全体の横幅 */
#define TEXT_PLANE_W_BYTES (TEXT_PLANE_WIDTH / 8) /* 横1ラインのバイト数 */
#define TEXT_PLANE_HEIGHT 1024 /* プレーン全体の縦高 */
#define TEXT_PLANE_SIZE (TEXT_PLANE_WIDTH * TEXT_PLANE_HEIGHT)
/* 1プレーンのdot数 */
#define TEXT_PLANE_BYTES (TEXT_PLANE_W_BYTES * TEXT_PLANE_HEIGHT)
/* 1プレーンのバイトサイズ */
#define TEXT_PLANE_0 ((uchar *)0xe00000) /* プレーン0先頭アドレス */
#define TEXT_PLANE_1 (TEXT_PLANE_0 + TEXT_PLANE_BYTES) /* プレーン1先頭アドレス */
#define TEXT_PLANE_2 (TEXT_PLANE_1 + TEXT_PLANE_BYTES) /* プレーン2先頭アドレス */
#define TEXT_PLANE_3 (TEXT_PLANE_2 + TEXT_PLANE_BYTES) /* プレーン3先頭アドレス */
/* パレット
* テキストパレットは、スプライトパレット0と共用
*/
#define TEXT_PALET_KAZ 16 /* パレット数 */
#define TEXT_PALET_ADDR ((ushort *)0xe82200) /* テキストパレットアドレス */
/* スプライト関係 */
/* PCGエリア */
#define PCG_PAT_KAZ 256 /* PCG パターン数 */
#define PCG_PAT_WIDTH 16 /* 1パターンの横幅 */
#define PCG_PAT_W_BYTES (PCG_PAT_WIDTH / 2) /* 横1ラインのバイト数(1dot=4bit) */
#define PCG_PAT_HEIGHT 16 /* 1パターンの縦高 */
#define PCG_PAT_SIZE (PCG_PAT_WIDTH * PCG_PAT_HEIGHT) /* 1パターンのdot数 */
#define PCG_PAT_BYTES (PCG_PAT_SIZE / 2) /* 1パターンのバイトサイズ */
#define PCG_MEM_ADDR ((uchar *)0xeb8000) /* PCG メモリアドレス */
#define PCG_MEM_BYTES (PCG_PAT_BYTES * PCG_PAT_KAZ) /* PCG メモリサイズ(バイト単位) */
/* パレット
* スプライトパレット0 はテキストパレットと共用なので、
* ここでは除外して扱う
*/
#define SPR_PALET_ON_TBL 16 /* 1テーブル上のパレット数 */
#define SPR_PALET_TBL_KAZ 15 /* テーブル数 */
#define SPR_PALET_KAZ (SPR_PALET_ON_TBL * SPR_PALET_TBL_KAZ) /* 総パレット数 */
#define SPR_PALET_BYTES (SPR_PALET_KAZ * sizeof(ushort)) /* パレットデータサイズ(バイト単位) */
#define SPR_PALET_ADDR (TEXT_PALET_ADDR + TEXT_PALET_KAZ) /* パレット開始アドレス */
/* BG関係 */
#define BG_PAGE_WIDTH 64 /* 1ページの横パターン数 */
#define BG_PAGE_HEIGHT 64 /* 1ページの縦パターン数 */
#define BG_PAGE_SIZE (BG_PAGE_WIDTH * BG_PAGE_HEIGHT) /* 1ページのパターン数 */
/* PCG パターン */
#if defined(BG_PCG_PAT_SIZE_8)
#define BG_PCG_PAT_WIDTH 8 /* 横幅 */
#define BG_PCG_PAT_HEIGHT 8 /* 縦高 */
#else
#define BG_PCG_PAT_WIDTH 16 /* 横幅 */
#define BG_PCG_PAT_HEIGHT 16 /* 縦高 */
#endif
#define BG_PCG_PAT_W_BYTES (BG_PCG_PAT_WIDTH / 2) /* 横1ラインのバイト数 */
#define BG_PCG_PAT_SIZE (BG_PCG_PAT_WIDTH * BG_PCG_PAT_HEIGHT)
/* 1パターンのdot数 */
#define BG_PCG_PAT_BYTES (BG_PCG_PAT_SIZE / 2) /* 1パターンのバイトサイズ */
/* データエリア */
typedef struct { /* データ構造(2byte) */
char vr: 1; /* 垂直方向反転(=1:反転) */
char hr: 1; /* 水平方向反転(=1:反転) */
char rsv: 2; /* 必ず 0 */
char color: 4; /* 色コードの上位4bit(=パレットテーブル番号) */
char pcg; /* 使用パターン番号 */
} bg_data_t;
#define BG_DATA_AREA_0 ((ushort *)0xebc000) /* データエリア0先頭アドレス */
#define BG_DATA_AREA_1 ((ushort *)0xebe000) /* データエリア1先頭アドレス */
/* スクロールレジスタ */
#define BG_PAGE0_SCRL_X ((short *)0xeb0802) /* ページ0スクロールX座標アドレス */
#define BG_PAGE0_SCRL_Y ((short *)0xeb0800) /* ページ0スクロールY座標アドレス */
#define BG_PAGE1_SCRL_X ((short *)0xeb0806) /* ページ1スクロールX座標アドレス */
#define BG_PAGE1_SCRL_Y ((short *)0xeb0804) /* ページ1スクロールY座標アドレス */
/* コントロールレジスタ(2byte) */
typedef struct {
char rsv0: 6; /* 必ず 0 */
char disp_cpu: 1; /* スプライト/BG表示フラグ(=0:表示off/=1:表示on) */
char rsv1: 3; /* 必ず 0 */
char bg1_txsel: 2; /* BG1の使用データエリア
* (=00:エリア0/=01:エリア1/=10,11:未定義)
*/
char bg1_on: 1; /* BG1表示フラグ(=0:表示off/=1:表示on) */
char bg0_txsel: 2; /* BG0の使用データエリア
* (=00:エリア0/=01:エリア1/=10,11:未定義)
*/
char bg0_on: 1; /* BG0表示フラグ(=0:表示off/=1:表示on) */
} bg_ctrl_t;
#define BG_CTRL ((ushort *)0xeb0808) /* レジスタアドレス */
/* CRTC */
/* 動作ポートレジスタ(2byte) */
typedef struct { /* ビット構造 */
char uncoded; /* 未使用領域 */
char rsv0: 4; /* 予約域 */
char rc: 1; /* テキスト画面ラスタコピー(bit=1:開始/=0:停止) */
char rsv1: 1; /* 必ず 0 */
char fc: 1; /* グラフィック画面高速クリア(bit=1:開始/=0:停止) */
char vi: 1; /* 画像取り込み(bit=1:開始/=0:停止) */
} crtc_mode_t;
enum { /* ビット番号 */
CRTC_MODE_VI = 0, /* 画像取り込み(bit=1:開始/=0:停止) */
CRTC_MODE_FC, /* グラフィック画面高速クリア(bit=1:開始/=0:停止) */
CRTC_MODE_0, /* 必ず 0 */
CRTC_MODE_RC, /* テキスト画面ラスタコピー(bit=1:開始/=0:停止) */
CRTC_MODE_BITS
};
#define CRTC_MODE ((ushort *)0xe80480)
/* R21レジスタ(2byte) */
typedef struct { /* ビット構造 */
short rsv: 6; /* 予約域 */
short men: 1; /* テキスト画面アクセスマスクの有効(bit=1)/無効(bit=0)切替 */
short sa: 1; /* テキスト画面同時アクセスのon(bit=1)/off(bit=0)切替 */
short ap: 4; /* テキスト画面同時アクセス対象プレーン(bit=1:該当プレーンを対象に) */
short cp: 4; /* テキスト画面ラスタコピー対象プレーン(bit=1:該当プレーンを対象に)
* or グラフィック画面高速クリア対象ページ(bit=1:該当プレーンを対象に)
* 4ページの時は各bitが各ページに該当
* 2ページの時は上位2bitがページ1に、下位2bitがページ0に該当
* 1ページの時は全bitがページ0に該当
*/
} crtc_r21_t;
enum { /* ビット番号 */
CRTC_R21_CP = 0, /* テキスト画面ラスタコピー対象プレーン
* or グラフィック画面高速クリア対象ページ
* bit=1で該当プレーン/ページを対象にする(4bit)
*
* グラフィックの場合、
* 4ページの時は各bitが各ページに該当
* 2ページの時は上位2bitがページ1に、下位2bitがページ0に該当
* 1ページの時は全bitがページ0に該当
*/
CRTC_R21_AP = CRTC_R21_CP + 4,
/* テキスト画面同時アクセス対象プレーン(4bit)
* (bit=1:該当プレーンを対象に)
*/
CRTC_R21_SA = CRTC_R21_AP + 4,
/* テキスト画面同時アクセスのon(bit=1)/off(bit=0)切替 */
CRTC_R21_MEN, /* テキスト画面アクセスマスクの有効(bit=1)/無効(bit=0)切替 */
CRTC_R21_BITS
};
#define CRTC_R21 ((ushort *)0xe8002a)
/* R22レジスタ(2byte) */
typedef struct { /* ビット構造 */
char src; /* ラスタコピー元ラスタブロック(1ブロック=4ラスタ) */
char dst; /* ラスタコピー先ラスタブロック */
} crtc_r22_t;
#define CRTC_R22 ((ushort *)0xe8002c)
/* R23レジスタ(2byte) */
#define CRTC_R23 ((ushort *)0xe8002e) /* テキスト画面:アクセスマスク */
/* ビデオコントローラ */
/* R1 */
#define VCTRL_R1 ((ushort *)0xe82500)
/* R2 */
enum { /* ビット番号 */
VCTRL_R2_GS0 = 0, /* 512x512 グラフィック 優先度最高ページの表示on/off(=1:on) */
VCTRL_R2_GS1, /* 512x512 グラフィック 優先度高ページの表示on/off(=1:on) */
VCTRL_R2_GS2, /* 512x512 グラフィック 優先度低ページの表示on/off(=1:on) */
VCTRL_R2_GS3, /* 512x512 グラフィック 優先度最低ページの表示on/off(=1:on) */
VCTRL_R2_GS4, /* 1024x1024 グラフィック 表示on/off(=1:on) */
VCTRL_R2_TON, /* テキスト画面 表示on/off(=1:on) */
VCTRL_R2_SON, /* スプライト/BG画面 表示on/off(=1:on) */
VCTRL_R2_0, /* 必ず 0 */
VCTRL_R2_GT, /* =1:グラフィックとテキストを合成 */
VCTRL_R2_GG, /* =1:グラフィックとグラフィックを合成 */
VCTRL_R2_BP, /* =0:シャープ予約
* /=1:グラフィック最下位bitで半透明/特殊プライオリティdotを指示
*/
VCTRL_R2_HP, /* (EXON=1の時)=0:特殊プライオリティ/=1:半透明 */
VCTRL_R2_EXON, /* =1:特殊表示機能(特殊プライオリティ/半透明機能)を実行 */
VCTRL_R2_VHT, /* =1:グラフィックとビデオ画像を合成 */
VCTRL_R2_AH, /* =1:グラフィックとテキストパレット0の色を半透明合成 */
VCTRL_R2_YS, /* =1:スーパーインポーズ時にビデオ画像を表示しない */
VCTRL_R2_BITS
};
#define VCTRL_R2 ((ushort *)0xe82600)
/* MFP(マルチファンクションペリフェラル) */
/* GPIP */
enum { /* ビット番号 */
MFP_GPIP_ALARM = 0, /* RTC(時計):ALARM信号(=1:H(通常)/=0:L) */
MFP_GPIP_EXPOM, /* EXPON 信号(=1:H(通常)/=0:L) */
MFP_GPIP_POWER, /* 本体前面の電源スイッチ(=1:スイッチoff/=0:on(通常)) */
MFP_GPIP_FMIRQ, /* FM音源ICの割り込み要求(=1:要求なし/=0:要求中) */
MFP_GPIP_V_DISP, /* CRTC:V-DISP信号(=1:垂直表示期間/=0:垂直帰線期間) */
MFP_GPIP_1, /* 必ず 1 */
MFP_GPIP_CIRQ, /* CRTC:ラスタ割り込み要求(=1:要求なし/=0:要求中) */
MFP_GPIP_H_SYNC, /* CRTC:H-SYNC信号(=1:H(水平同期期間))=0:L) */
MFP_GPIP_BITS
};
#define MFP_GPIP ((uchar *)0xe88001)
/* 安易マクロ */
/* RGB の値から色要素を作成する(輝度Iは0固定) */
#define _RGB(_r, _g, _b) ((((_g) << 10) | ((_r) << 5) | (_b)) << 1)
/* RGBI の値から色要素を作成する */
#define _RGBI(_r, _g, _b, _i) (((((_g) << 10) | ((_r) << 5) | (_b)) << 1) + (_i))
/* 指定座標のGVRAMアドレスを算出する */
#define _GRAMADDR(x, y) (GRPH_PAGE_0 + ((y) * GRPH_PAGE_WIDTH + (x)))
#endif /* !defined(SCRNCOM_H_HAS_INCLUDED) */